#include <bits/stdc++.h>
using namespace std;
using ll=long long;
#define int ll
#define rng(i,a,b) for(int i=int(a);i<int(b);i++)
#define rep(i,b) rng(i,0,b)
template<class t,class u> void chmax(t&a,u b){if(a<b)a=b;}
template<class t,class u> void chmin(t&a,u b){if(b<a)a=b;}
template<class t> using vc=vector<t>;
template<class t> using vvc=vc<vc<t>>;
using pi=pair<int,int>;
using vi=vc<int>;
using uint=unsigned;
using ull=unsigned long long;
int popcount(signed t){
    return __builtin_popcount(t);
}
int popcount(ll t){
    return __builtin_popcountll(t);
}
bool ispow2(int i){
    return i&&(i&-i)==i;
}
ll mask(int i){
    return (ll(1)<<i)-1;
}
int lcm(int a, int b)
{
    return a / __gcd(a, b) * b;
}
signed main(){
    cin.tie(0);
    ios::sync_with_stdio(0);
    cout<<fixed<<setprecision(20);
    int n; cin>>n;
    vc<vc<int>> G;
    G.resize(n);
    vc<int> a(n-1),b(n-1);
    rep(i,n-1){
        cin>>a[i]>>b[i];
        a[i]--, b[i]--;
        G[a[i]].push_back(b[i]);
        G[b[i]].push_back(a[i]);
    }
    vc<int> p(n,-1);
    vc<vc<int>> ch(n);
    queue<int> q;
    q.push(0);
    vc<int> bfs;
    while(!q.empty()){  //把0号节点作为根节点，bfs建树，同时记录每个节点的父、子节点
        int v= q.front();
        q.pop();
        bfs.push_back(v);
        for(auto w: G[v]){
            if(w!=p[v]){
                //先祖じゃないなら
                p[w]=v;
                ch[v].push_back(w);
                q.push(w);
            }
        }
    }

    int Q; cin>>Q;
    int sum=0;
    vc<int> c(n,0);
    while(Q--){ //连通A且不经过B的点，根据他们的父子关系做相应处理
        int t,e,x; cin>>t>>e>>x;
        e--;
        int A,B;
        if(t==1){
            A=a[e];
            B=b[e];
        }
        else if(t==2){
            A=b[e];
            B=a[e];
        }
        if(B==p[A]){    //如果A是B的孩子，那么A所在的子树要增加x
            c[A]+=x;
        }else{  //如何A是B的父亲，那么问题等价于把所有节点增加x，再把B所在的子树减少x
            sum+=x;
            c[B]-=x;
        }
    }
    for(auto j : bfs){  //从根节点开始，按bfs的顺序，将节点的变化传递下去，实际上就是完成了增加效果，只不过因为树的拓扑结构允许这种方式来操作
        for(auto w: ch[j]){
            c[w]+=c[j];
        }
    }
    for(int i=0; i<n; i++) cout<<sum+c[i]<<endl;    //所有节点增加的数目补上
    return 0;
}